﻿Imports WallpaperManager.Org.Mentalis.Files
Imports System.ComponentModel 

Public Class Configuration
	
	Private Shared _instance As Configuration
	Private _ini As IniReader
	
	''' <summary>
	''' Liefert das eindeutige Configurationsobjekt.
	''' </summary>
	Public Shared ReadOnly Property GetObject() As Configuration
		Get
			' wenn die instance des Configurationsobjektes noch nicht existiert
			' wird sie angelegt.
			If _instance Is Nothing Then
				_instance = New Configuration
			End If
			' zurückgeben des eindeutigen objektes
			Return _instance
		End Get
	End Property
	
	''' <summary>
	''' Erstellt das das Configurationsobjekt.
	''' </summary>
	Private Sub New()
		' erstellt das Objekt zum auslesen der ini-Datei
		_ini = New IniReader(Application.StartupPath & "\config.ini")
	End Sub
	
	''' <summary>
	''' Liefert die Auflösung die verwendet werden soll.
	''' </summary>
	''' <remarks>Dies ist ein Test.</remarks>
	<Obsolete("Bitte verwenden Sie in Zukunft die Properties 'ShowResolution' und 'DownloadResolution'"), _
	DisplayName("Auflösung"), _
	Description("Die Desktopauflösung, die im WallpaperManager angezeigt, heruntergeladen und verwendet werden soll."), _
	Category("Allgemein")> _
	Public Property Resolution() As String
		Get
			Return _ini.ReadString("general", "resolution", "1280x1024")
		End Get
		Set(ByVal value As String)
			_ini.Write("general", "resolution", value)
		End Set
	End Property
	
	
	<DisplayName("RSS Url"), _
	Description("Die RSS Url, die ausgewertet werden soll wenn der Download gestartet wird."), _
	Category("Allgemein")> _
	Public Property RSSUrl() As String
		Get
			'Return _ini.ReadString("general", "rssurl", "http://www.skins.be/feeds/de/irina-sheik.xml")
			Return _ini.ReadString("general", "rssurl", "http://www.skins.be/feeds/de/skins.xml")
		End Get
		Set
			_ini.Write("general", "rssurl", value)
		End Set
	End Property
	
	''' <summary>
	''' Liefert die Auflösung die verwendet werden soll wenn Bilder zur Anzeige gebracht werden.
	''' </summary>
	<Browsable(false)> _
	Public Property ShowResolution() As String
		Get
			Return _ini.ReadString("general", "show_resolution", "1280x800")
		End Get
		Set
			_ini.Write("general", "show_resolution", value)
		End Set
	End Property
	
	''' <summary>
	''' Liefert die Auflösung die verwendet werden soll um Bilder herunter zu laden.
	''' </summary>
	<Browsable(false)> _
	Public Property DownloadResolution() As String
		Get
			Return _ini.ReadString("general", "download_resolution", "1280x800")
		End Get
		Set
			_ini.Write("general", "download_resolution", value)
		End Set
	End Property
	
	''' <summary>
	''' Liefert den Dateipfad in dem die Bilder gespeichert werden sollen.
	''' </summary>
	<DisplayName("Download Pfad"), _
	Category("Allgemein")> _
	Public Property SkinsPath() As String
		Get
			Return _ini.ReadString("general", "skins_path", Application.StartupPath & "\models\")
		End Get
		Set
			_ini.Write("general", "skins_path", value)
		End Set
	End Property
	
	''' <summary>
	''' Liefert das Bild, das im Startbildschirm auf der linken Seite stehen soll.
	''' </summary>
	<DisplayName("Startbild Links"), _
	Category("Allgemin")> _
	Public ReadOnly Property StartupImageLeft() As String
		Get
			Return _ini.ReadString("general", "startup_image_left", "loginimageleft.jpg")
		End Get
	End Property
	
	''' <summary>
	''' Liefert das Bild, das im Startbildschirm auf der rechten Seite stehen soll.
	''' </summary>
	<DisplayName("Startbild Rechts"), _
	Category("Allgemin")> _
	Public ReadOnly Property StartupImageRight() As String
		Get
			Return _ini.ReadString("general", "startup_image_right", "loginimageright.jpg")
		End Get
	End Property
	
	''' <summary>
	''' Liefert den SQL Select, der für eine ORACLE Übersicht verwendet werden soll.
	''' </summary>
	Public ReadOnly Property ÜbersichtSQLOracle() As String
		Get
			' Leerstring initialisieren und den Inhalt der sql-Datei auslesen.
			Dim re As String = ""
			Dim s() As String = System.IO.File.ReadAllLines(Application.StartupPath & "\ora_list_sql.sql")
			' zeilenweise den Returnstring zuordnen
			For i As Integer = 0 To s.Length - 1 Step 1
				re &= s(i) & " " & vbNewLine
			Next
			Return re
		End Get
	End Property
	
	''' <summary>
	''' Liefert den SQL Select, der für eine SQLite Übersicht verwendet werden soll.
	''' </summary>
	Public ReadOnly Property ÜbersichtSQLSQLite() As String
		Get
			' Leerstring initialisieren und den Inhalt der sql-Datei auslesen.
			Dim re As String = ""
			Dim s() As String = System.IO.File.ReadAllLines("sqlite_list_sql.sql")
			' zeilenweise dem Returnstring zuordnen
			For i As Integer = 0 To s.Length - 1 Step 1
				re &= s(i) & " " & vbNewLine
			Next
			Return re
		End Get
	End Property
	
	''' <summary>
	''' Liefert den SQL Select, der für eine MySQL Übersicht verwendet werden soll.
	''' </summary>
	Public ReadOnly Property ÜbersichtSQLMySQL() As String
		Get
			' Leerstring initialisieren und den Inhalt der sql-Datei auslesen.
			Dim re As String = ""
			Dim s() As String = System.IO.File.ReadAllLines("mysql_list_sql.sql")
			' zeilenweise dem Returnstring zuordnen
			For i As Integer = 0 To s.Length - 1 Step 1
				re &= s(i) & " " & vbNewLine
			Next
			Return re
		End Get
	End Property
	
	''' <summary>
	''' Liefert den SQLite DataSource
	''' </summary>
	Public ReadOnly Property SQLiteDataSource() As String
		Get
			Return _ini.ReadString("database", "sqlite_datasource", "")
		End Get
	End Property
	
	''' <summary>
	''' Liefert den ORACLE DataSource
	''' </summary>
	Public ReadOnly Property OracleDataSource() As String
		Get
			Return _ini.ReadString("database", "ora_datasource", "")
		End Get
	End Property
	
	Public ReadOnly Property DatabaseType() As Integer
		Get
			Return _ini.ReadInteger("database", "dbtype", 1)
		End Get
	End Property
	
	Public ReadOnly Property DatabaseUserID() As String
		Get
			Return _ini.ReadString("database", "userid", "")
		End Get
	End Property
	
	Public ReadOnly Property DatabasePassword() As String
		Get
			Return _ini.ReadString("database", "password", "")
		End Get
	End Property
	
	Public ReadOnly Property OraclePort() As String
		Get
			Return _ini.ReadString("database", "ora_port", "")
		End Get
	End Property
	
	Public ReadOnly Property MySQLServer() As String
		Get
			Return _ini.ReadString("database", "mysql_server", "")
		End Get
	End Property
	
	Public ReadOnly Property MySQLDatabase() As String
		Get
			Return _ini.ReadString("database", "mysql_database", "")
		End Get
	End Property
	
	Public ReadOnly Property MySQLPort() As String
		Get
			Return _ini.ReadString("database", "mysql_port", "3306")
		End Get
	End Property
	
	Private ReadOnly Property GetSysCheck() As Boolean
		Get
			Return _ini.ReadBoolean("sys", "syscheck", False)
		End Get
	End Property
	
	Public Property ThreadCheckNew() As Boolean
		Get
			Return _ini.ReadBoolean("threadcheck", "threadchecknew", True)
		End Get
		Set(ByVal value As Boolean)
			_ini.Write("threadcheck", "threadchecknew", value)
		End Set
	End Property
	
	Public Property ThreadCheckIntervall() As Integer
		Get
			'ret
		End Get
		Set(ByVal value As Integer)
			
		End Set
	End Property
	
	Public Sub Selfcheck()
		If Not GetSysCheck Then
			If MsgBox("Die Configurationsdatei " & Application.StartupPath & "\config.ini konnte nicht gefunden werden." & _
				vbNewLine & "Soll der WallpaperManager mit den Defaultwerten gestartet werden?", MsgBoxStyle.Critical + MsgBoxStyle.YesNo, _
				"Config.ini nicht gefunden!") = MsgBoxResult.No Then
				End
			End If
		End If
	End Sub
	
End Class
